home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
EDITORS
/
TWIN
/
!Twin
/
Source
< prev
next >
Wrap
Text File
|
1990-08-25
|
8KB
|
316 lines
; Launch Twin from the Desktop
; © 1990 Joe Abley
; Version 1.00
; Last updated 7 May 1990
r0 RN 0
r1 RN 1
r2 RN 2
r3 RN 3
r4 RN 4
r5 RN 5
r6 RN 6
r7 RN 7
sp RN 12
r13 RN 13
lr RN 14
pc RN 15
TextFile * &FFF
X * &20000
ErrorNumber * 42
HalfWidth * 4*16 ; half the width of a menu
; Memory management
FreeMemory * &8600
Buffer * FreeMemory
Indirected * FreeMemory+&400
Stack * FreeMemory+&800
ORG &8000
EntryPoint LDR sp, =Stack
STMEA sp!, {lr}
MOV r0, #200
LDR r1, TaskWord
ADR r2, TaskName
SWI Wimp_Initialise
STR r0, TaskWord
SWI Hourglass_On
BL InitTemplates
BL InitIconBar
SWI Hourglass_Off
BL PollLoop
LDR r0, TaskHandle
LDR r1, TaskWord
SWI Wimp_CloseDown
LDMEA sp!, {pc}
TaskWord DCB "TASK"
TaskName DCB "Twin", 0
TaskHandle DCD 0
; --------------------------------------------------------------
InitTemplates STMEA sp!, {lr}
ADR r1, TemplateName
SWI Wimp_OpenTemplate
ADRL r1, Buffer
ADRL r2, Indirected
ADD r3, r2, #&400
MOV r4, #-1
ADR r5, WindowName
MOV r6, #0
SWI Wimp_LoadTemplate
ADRL r1, Buffer
SWI Wimp_CreateWindow
STR r0, WindowHandle
SWI Wimp_CloseTemplate
LDMEA sp!, {pc}
TemplateName DCB "<twin$dir>.Templates", 0
ALIGN
WindowName DCB "info"
DCD 0, 0, 0
; --------------------------------------------------------------
InitIconBar ADR r1, IconBlock
SWI Wimp_CreateIcon
STR r0, IconHandle
MOV pc, lr
IconHandle DCD 0
IconBlock DCD -1
DCD 0
DCD 0
DCD 68
DCD 68
DCD &311A
DCD SpriteName
DCD 1
DCD 5
SpriteName DCB "!twin", 0
; --------------------------------------------------------------
PollLoop ADRL r1, Buffer
LDR r0, =&1933
SWI Wimp_Poll
CMP r0, #2
SWIEQ Wimp_OpenWindow
BEQ PollLoop
CMP r0, #3
SWIEQ Wimp_CloseWindow
BEQ PollLoop
CMP r0, #6
BEQ MouseClick
CMP r0, #9
BEQ MenuSelect
CMP r0, #17
CMPNE r0, #18
BNE PollLoop
; --------------------------------------------------------------
LDR r0, [r1, #16] ; get message type
CMP r0, #0
MOVEQ pc, lr
CMP r0, #3
BEQ DataLoad
CMP r0, #1
BEQ DataSave
CMP r0, #5
BEQ DataOpen
B PollLoop
; --------------------------------------------------------------
DataLoad LDR r2, [r1, #4] ; sender's task
LDR r0, [r1, #8] ; fill in your_ref
STR r0, [r1, #12]
MOV r0, #4 ; DataLoad_Ack
STR r0, [r1, #16]
MOV r0, #17
SWI Wimp_SendMessage ; Ack
LDR r0, TwinCommand
STR r0, Buffer
MOV r0, #" "
STRB r0, Buffer+4
ADD r3, r1, #44
ADRL r4, Buffer+5
Copy1 LDRB r0, [r3]
STRB r0, [r4]
ADD r3, r3, #1
ADD r4, r4, #1
CMP r0, #32
BGE Copy1
ADRL r0, Buffer
SWI Wimp_StartTask
ADR r0, RemoveScrap
SWI X+OS_CLI
B PollLoop
TwinCommand DCB "Twin"
RemoveScrap DCB "Remove <Wimp$Scrap>", 0
; --------------------------------------------------------------
DataOpen LDR r0, [r1, #40]
LDR r2, =TextFile
CMP r0, r2
BEQ DataLoad
B PollLoop
; --------------------------------------------------------------
DataSave LDR r2, [r1, #4]
LDR r0, [r1, #8] ; fill in your_ref
STR r0, [r1, #12]
MOV r0, #2 ; DataSave_Ack
STR r0, [r1, #16]
MOV r0, #60 ; New block size
STR r0, [r1, #0]
ADR r3, ScrapFile ; copy scrapfile name across
MOV r4, #44
Copy2 LDRB r0, [r3, #0]
STRB r0, [r1, r4]
ADD r3, r3, #1
ADD r4, r4, #1
CMP r0, #0
BNE Copy2
MOV r0, #17
SWI Wimp_SendMessage
B PollLoop
ScrapFile DCB "<Wimp$Scrap>", 0, 0, 0, 0, 0, 0
; --------------------------------------------------------------
MouseClick LDR r0, [r1, #8]
CMP r0, #2
BNE FileLess
LDR r2, [r1, #0] ; Must be menu on our icon
ADR r1, MenuBlock
SUB r2, r2, #HalfWidth
MOV r3, #95+2*44
SWI Wimp_CreateMenu
B PollLoop
MenuBlock DCB "Twin"
DCD 0, 0
DCB 7, 2, 7, 0
DCD HalfWidth*2, 44, 0
DCD 0
WindowHandle DCD 0
DCD &7000021
DCB "Info"
DCD 0
DCD 0
DCD &80
DCD -1
DCD &7000021
DCB "Quit", 0
; --------------------------------------------------------------
FileLess LDR r0, TwinCommand
STR r0, Buffer
MOV r0, #13
STRB r0, Buffer+4
ADRL r0, Buffer
SWI Wimp_StartTask
B PollLoop
; --------------------------------------------------------------
MenuSelect LDR r0, [r1, #0]
CMP r0, #1
BNE PollLoop
MOV pc, lr
; --------------------------------------------------------------
BreakPoint STMEA sp!, {r0-r2, lr}
ADR r0, BreakErr
MOV r1, #0
ADR r2, BreakName
SWI Wimp_ReportError
LDMEA sp!, {r0-r2, pc}
BreakErr DCB " Halted", 0
BreakName DCB "BreakPoint", 0
ProgramEnd
END